1

1、创建数据容器

常见的使用场景是使用纯数据容器来持久化数据库、配置文件或者数据文件等。官方的文档上有详细的解释。例如:

$ docker run --name dbdata postgres echo "Data-only container for postgres"

该命令将会创建一个已经包含在Dockerfile里定义过Volume的postgres镜像,运行echo命令然后退出。当我们运行docker ps命令时,echo可以帮助我们识别某镜像的用途。我们可以用-volumes-from命令来识别其它容器的Volume:

$ docker run -d --volumes-from dbdata --name db1 postgres

使用数据容器的两个注意点:

  • 不要运行数据容器,这纯粹是在浪费资源。

  • 不要为了数据容器而使用“最小的镜像”,如busybox或scratch,只使用数据库镜像本身就可以了。你已经拥有该镜像,所以并不需要占用额外的空间。

授权访问数据卷

如果要授权一个容器访问另一个容器的Volume,我们可以使用-volumes-from参数来执行docker run

备份数据卷到物理机器

#sudo docker run --volumes-from dbdata -v $(pwd):/backup--name worker ubuntu tar cvf /backup/backup.tar /dbdata

首先利用ubuntu镜像创建一个容器worker.使用—volumes-from dbdata参数来让容器挂载dbdata容器的数据卷;使用 –v $(pwd):/backup参数来挂载本机的当前目录到worker容器的/backup目录
Woker容器启动后,执行tar命令将/dbdata压缩到/backup/backup.tar,这样就到物理机的当前目录了


2、在容器内创建一个数据卷

在用docker run命令的时候,使用-v标记可以在容器内创建一个数据卷。多次使用-v标记可以创建多个数据卷。
下面使用training/webapp镜像创建一个Web容器,并创建一个数据卷挂载到容器的/we-bapp目录:
$ sudo docker run -d -P --name web -v /webapp training/webapp
注意 -P是允许外部访问容器需要暴露的端口。

查看该数据卷在主机上的存储目录

docker inspect -f {{.Volumes}} your-container-name

这种应该是在主机/var/lib/docker目录底下随机命名的一个目录去挂载,如果是在mac上,则该目录在visualbox上面。

3、挂载本机目录(这个是在dockerfile中VOLUME无法做到的)

使用-v标记也可以指定挂载一个本地的已有目录到容器中去作为数据卷:
$ sudo docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp
上面的命令加载主机的/src/webapp目录到容器的/opt/webapp目录

挂载本机文件

挂载一个本地主机文件作为数据卷-v标记也可以从主机挂载单个文件到容器中作为数据卷:
$ sudo docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash这样就可以记录在容器输入过的命令历史了。

参考


codecraft
11.9k 声望2k 粉丝

当一个代码的工匠回首往事时,不因虚度年华而悔恨,也不因碌碌无为而羞愧,这样,当他老的时候,可以很自豪告诉世人,我曾经将代码注入生命去打造互联网的浪潮之巅,那是个很疯狂的时代,我在一波波的浪潮上留下...